package client.controleur;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;

import client.vue.Jeu;
import client.vue.Vue;
import codebase.IJoueur;
import codebase.IPartie;

public class JeuActionListener implements ActionListener, Serializable {

	private static final long serialVersionUID = 1L;
	private Jeu jeu;
	private IPartie partie;
	private IJoueur joueur;

	public JeuActionListener(Jeu jeu, IPartie partie, IJoueur joueur) {
		this.jeu = jeu;
		this.partie = partie;
		this.joueur = joueur;
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		JButton boutton = (JButton) arg0.getSource();
		if (boutton.equals(jeu.getBoutonQuitter())) {
			if (JOptionPane.showConfirmDialog(jeu, "Voulez-vous vraiment quitter la partie?",
					"Quitter", JOptionPane.YES_NO_OPTION) == 0) {
				try {
					partie.supprimerJoueur(joueur);
				} catch (RemoteException e) {
					e.printStackTrace();
				}
				Vue.changeFenetre("Accueil");
			}
		} else if (boutton.equals(jeu.getBoutonNextPhase())) {
			try {
				System.out.println(partie.getDernierTour().getPhase());
				if (partie.getDernierTour().getPhase() == 2) {
					partie.arbitrer();
				}
				partie.phaseSuivante();
				partie.afficheEtatPartie();
				/*
				 * vue.refreshInfoPhase(); vue.validate(); vue.repaint();
				 */
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		} else if (boutton.equals(jeu.getBoutonStartChat())) {
			jeu.afficherChat(true);

			jeu.getBoutonStartChat().setIcon(new ImageIcon());

			Component[] boxGroup = jeu.getPanelListeChkBox().getComponents();

			ArrayList<String> listeJoueursChat = new ArrayList<String>();

			for (Component check : boxGroup) {
				JCheckBox cb = (JCheckBox) check;
				if (cb.isSelected()) {
					listeJoueursChat.add(cb.getText());
				}
			}

			try {
				if (listeJoueursChat.size() > 1 || jeu.getTabs().size() > 0) {
					jeu.addNewTab(listeJoueursChat, true);
				} else {
					jeu.afficherChat(false);
				}
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		} else if (boutton.equals(jeu.getBoutonSwap())) {
			jeu.afficherChat(false);
			try {
				jeu.refreshListeJoueurs();
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		}
	}
}
